package dodoCal;

/**
 * @fileName calFrame.java
 * @description 打印室计算器
 * @feature 可按阶段计费，设置分段打印单价，自动计算需付款;
 *		支持最多设置两个阶段
 *		支持保存阶段的单价、阶段张数设置(双击计费明细区域，弹出设置窗口)
 * @author Dodo ,http://duxing.g8up.cn
 * @createDate 2010年12月20日 00:04:44
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class calFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	JFrame fCal;// 窗口
	JLabel lPrice;// 价格明细
	JLabel lRet;// 标签结果
	JLabel lCal;// 标签 张数
	JTextField tCal;// 输入框
	JButton bCal;// 计算按钮
	JPanel pCal;// 面板
	JPanel pRet;// 结果展示
	JPanel pPrice;// 价格展示

	boolean colorFlag = true;
	/* 设置窗口 */
	JFrame fCfg;
	JTextField tLevel;
	JTextField tPrice1;
	JTextField tPrice2;

	calConfig cfg;

	public calFrame() {
	}

	public void init() {
		cfg = calConfig.getConfigSilencely();
		fCal = new JFrame("107打印室");
		fCal.setLayout(new GridLayout(3, 1));
		fCal.setBounds(100, 100, 50, 60);
		fCal.setBackground(new Color(199, 237, 204));
		fCal.setLocation(500, 400);
		fCal.setResizable(false);
		// 计费明细
		pPrice = new JPanel();
		lPrice = new JLabel("前" + cfg.getLevel() + "张:" + cfg.getPrice1()
				+ "元/张; 超过部分:" + cfg.getPrice2() + "元/张");
		lPrice.setFont(new Font("宋体", 1, 14));
		pPrice.setToolTipText("计费明细");
		pPrice.add(lPrice);
		pPrice.setBackground(new Color(199, 237, 204));
		// 激活配置窗口
		pPrice.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					showConfigPanel();// 显示设置窗口
				}
			}
		});
		// pPrice.setSize(320, 200);//信息展示面板

		// 输出结果
		lRet = new JLabel();
		lRet.setText("欢迎光临！");
		lRet.setFont(new Font("微软雅黑", 1, 20));
		// 结果展示
		pRet = new JPanel();
		pRet.add(lRet, BorderLayout.CENTER);
		pRet.setBackground(new Color(173, 230, 136));

		// 输入文本框
		tCal = new JTextField(4);
		tCal.setFont(new Font("微软雅黑", 1, 40));
		tCal.setBackground(new Color(128, 183, 238));
		tCal.setForeground(new Color(34, 91, 49));
		tCal.setToolTipText("请输入一个小于4位的正整数");
		// 张数
		lCal = new JLabel("打印张数：");
		lCal.setFont(new Font("微软雅黑", 1, 20));
		// lCal.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
		lCal.setLabelFor(tCal);
		// 按钮
		bCal = new JButton("计算");
		bCal.setFont(new Font("微软雅黑", 1, 30));
		bCal.setMnemonic(KeyEvent.VK_C);// 快捷键
		// 面板
		pCal = new JPanel();
		pCal.setLayout(new BorderLayout());
		pCal.add(lCal, BorderLayout.WEST);
		pCal.add(tCal, BorderLayout.CENTER);
		pCal.add(bCal, BorderLayout.EAST);
		pCal.setBackground(new Color(199, 237, 204));

		pPrice.setSize(310, 10);
		pRet.setSize(310, 50);
		pCal.setSize(310, 100);
		fCal.setSize(310, 170);

		// pCal.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

		// fCal.setIconImage(Image image);
		fCal.add(pPrice);
		fCal.add(pRet);
		fCal.add(pCal);
		//fCal.setIconImage( new ImageIcon("dodoCal\\calDodo.gif").getImage());
		fCal.setIconImage(new ImageIcon( this.getClass().getResource("calDodo.gif")).getImage());


		fCal.setVisible(true);

		fCal.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		bCal.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_LEFT) {
					showConfigPanel();
				}
			}
		});
		bCal.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				String piece = tCal.getText();
				float result = 0;// 所付费用
				if (piece.length() > 4) {
					alert(pCal, "输入张数不能超过4位");
					tCal.setText(piece.substring(0, 4));
					return;
				}
				int p = 0;
				try {
					p = Integer.parseInt(piece);
				} catch (NumberFormatException e) {
					tCal.setText("dodo");
					return;
				}
				if (p > 9999) {
					alert(pCal, "输入整数不能大于9999.");
					tCal.setText("9999");
					return;
				}
				if (p > cfg.getLevel()) {
					result = cfg.getPrice1() * cfg.getLevel()
							+ (p - cfg.getLevel()) * cfg.getPrice2();
				} else {
					result = cfg.getPrice1() * p;
				}
				String ret=result+"";
				//截取小数点后2位
				if( ret.substring(ret.indexOf('.')+1, ret.length()).length()>2)
				{
					ret=ret.substring(0,ret.indexOf('.')+2);
				}

				lRet.setText("您要付费：" + ret + " 元");
				if (colorFlag) {
					lRet.setForeground(new Color(184, 35, 80));
					colorFlag = !colorFlag;
				} else {
					lRet.setForeground(new Color(26, 148, 193));
					colorFlag = !colorFlag;
				}
			}
		});
	}

	public void showConfigPanel() {
		fCfg = new JFrame("参数设置");
		fCfg.setLayout(new GridLayout(4,1));
		fCfg.setIconImage(new ImageIcon(this.getClass().getResource("config.gif")).getImage());

		JPanel jCfg1=new JPanel(new GridLayout(1, 3));//配置面板
		JLabel lLevel = new JLabel("第一阶段范围：0~");
		tLevel = new JTextField();
		jCfg1.add(lLevel);
		jCfg1.add(tLevel);
		jCfg1.add(new JLabel("张"));

		JPanel jCfg2=new JPanel(new GridLayout(1, 3));//配置面板
		JLabel lPrice1 = new JLabel("第一阶段单价：");
		tPrice1 = new JTextField();
		jCfg2.add(lPrice1);
		jCfg2.add(tPrice1);
		jCfg2.add(new JLabel("元"));

		JPanel jCfg3=new JPanel(new GridLayout(1, 3));//配置面板
		JLabel lPrice2 = new JLabel("第二阶段单价：");
		tPrice2 = new JTextField();
		jCfg3.add(lPrice2);
		jCfg3.add(tPrice2);
		jCfg3.add(new JLabel("元"));

		JPanel jCfg4=new JPanel(new GridLayout(1, 2));//配置面板
		JButton bOK = new JButton("确定");
		JButton bCancel = new JButton("取消");
		jCfg4.add(bOK);
		jCfg4.add(bCancel);

		bOK.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				saveConfig();
				fCfg.setVisible(false);
			}
		});
		bCancel.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ev) {
				fCfg.setVisible(false);
			}
		});

//		jCfg.add(lLevel);
//		jCfg.add(tLevel);
//		jCfg.add(lPeiceUnit);
//		jCfg.add(lPrice1);
//		jCfg.add(tPrice1);
//		jCfg.add(new JLabel("元"));
//		jCfg.add(lPrice2);
//		jCfg.add(tPrice2);
//		jCfg.add(new JLabel("元"));
//		jCfg.setSize(250, 90);

//		jCfgButton.add(bOK);
//		jCfgButton.add(bCancel);
//		jCfgButton.setSize(250, 30);

		fCfg.add(jCfg1);
		fCfg.add(jCfg2);
		fCfg.add(jCfg3);
		fCfg.add(jCfg4);
		readConfig();
		fCfg.setBounds(100, 100, 50, 60);
		fCfg.setSize(250, 150);
		fCfg.setResizable(false);
		fCfg.setLocation(500, 400);
		fCfg.setVisible(true);
	}

	public void readConfig() {
		cfg = calConfig.getConfig();// 配置
		tLevel.setText(cfg.getLevel() + "");
		tPrice1.setText(cfg.getPrice1() + "");
		tPrice2.setText(cfg.getPrice2() + "");
	}

	public void saveConfig() {
		int LEVEL;
		float PRICE1;
		float PRICE2;
		try {
			LEVEL = Integer.parseInt(tLevel.getText());
			PRICE1 = Float.parseFloat(tPrice1.getText());
			PRICE2 = Float.parseFloat(tPrice2.getText());
		} catch (Exception e) {
			alert(fCfg, "输入格式有误，请重新输入。");
			return;
		}
		if (LEVEL > 9999) {
			alert(fCfg, "张数不可大于9999.");
			return;
		}
		calConfig cfg = new calConfig();
		cfg.setLevel(LEVEL);
		cfg.setPrice1(PRICE1);
		cfg.setPrice2(PRICE2);
		calConfig.saveConfig(cfg);
		this.cfg = cfg;
		lPrice.setText("前" + cfg.getLevel() + "张:" + cfg.getPrice1()
				+ "元/张; 超过部分:" + cfg.getPrice2() + "元/张");
	}

	public void alert(Component c, String msg) {
		Toolkit.getDefaultToolkit().beep();
		JOptionPane.showMessageDialog(c, msg);
	}

	public static void main(String[] args) {
		calFrame cf = new calFrame();
		cf.init();
	}
}
